package heuristicas;

import principal.Vertice;

public class H2 implements Heuristica {

    @Override
    public int calcula(Vertice v) {
        int erradas = 0;
        int atual;
        int proximo;

        for (int i = Vertice.LARG - 1, j = 0; i > 0; i--, j++) {

            for (int k = j; k < i; k++) {
                atual = v.getPuzzle()[k][j];
                proximo = v.getPuzzle()[k + 1][j];
                if (atual != proximo - 1) {
                    erradas++;
                }
            }

            for (int k = j; k < i; k++) {
                atual = v.getPuzzle()[i][k];
                proximo = v.getPuzzle()[i][k + 1];
                if (atual != proximo - 1) {
                    erradas++;
                }
            }

            for (int k = i; k > j; k--) {
                atual = v.getPuzzle()[k][i];
                proximo = v.getPuzzle()[k - 1][i];
                if (atual != proximo - 1) {
                    erradas++;
                }
            }

            for (int k = i; k > j; k--) {
                atual = v.getPuzzle()[j][k];
                proximo = v.getPuzzle()[j][k - 1];
                if ((j == 0) && (k == 1)) {
                    proximo = v.getPuzzle()[j + 1][k];
                }
                if ((j == 1) && (k == 2)) {
                    proximo = atual + 1;
                }
                if (atual != proximo - 1) {
                    erradas++;
                }
            }
        }

        return erradas;
    }
}
